package com.mbengue.corp.apr.ra.beans;

import java.io.Serializable;
import java.util.Date;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import com.mbengue.corp.apr.ra.core.Membre;
import com.mbengue.corp.apr.ra.dao.DAOFactory;
import com.mbengue.corp.apr.ra.dao.MembreDao;

@ManagedBean(name = "logging")
@SessionScoped
public class LoggingBean implements Serializable {
  private static final long serialVersionUID = 1L;
  private String userName = "";
  private String password = "";
  private String oldPassword = "";
  private Membre connectedUser;
  private MembreDao membreDao;
  private boolean loggedIn = false;

  public LoggingBean() {
    connectedUser = new Membre("Invité", "Non connecté", "", new Date(), "", "", "", "");
    membreDao = DAOFactory.getMembreDao();
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getOldPassword() {
    return oldPassword;
  }

  public void setOldPassword(String aOldPassword) {
    oldPassword = aOldPassword;
  }

  public Membre getConnectedUser() {
    return connectedUser;
  }

  //Method to verify the user authentication
  public String login() {
    connectedUser = membreDao.trouverMembre(userName);
    if (connectedUser != null && connectedUser.getMotDePasse().equals(password)) {
      loggedIn = true;
      password = "";
      return "success";
    }
    //
    connectedUser = null;
    FacesContext.getCurrentInstance().addMessage("login", new FacesMessage("Email ou mot de passe incorrecte !"));
    return "failure";
  }

  public String logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
    loggedIn = false;
    connectedUser = null;
    return "success";
  }

  public boolean getLoggedIn() {
    return loggedIn;
  }

  public boolean getSuperUser() {
    String userRole = connectedUser.getRole();
    return (userRole.equals("w") || userRole.equals("x"));
  }

  public boolean getAdmin() {
    return connectedUser.getRole().equals("x");
  }

  public void changerMotDePasse() {
    if (!oldPassword.isEmpty() && oldPassword.equals(connectedUser.getMotDePasse())) {
      if (password != null && !password.isEmpty()) {
        if (!password.equals(connectedUser.getMotDePasse())) {
          connectedUser.setMotDePasse(password);
          membreDao.update(connectedUser);
          FacesContext.getCurrentInstance().addMessage(null,
              new FacesMessage(FacesMessage.SEVERITY_INFO, "Mot de passe changé avec succès", ""));
        } else {
          FacesContext.getCurrentInstance().addMessage(
              null,
              new FacesMessage(FacesMessage.SEVERITY_ERROR,
                  "Le mot de passe saisi est le même que l'existant. Merci de saisir un mot de passe différent", ""));
        }
      } else {
        FacesContext.getCurrentInstance().addMessage("new",
            new FacesMessage(FacesMessage.SEVERITY_ERROR, "Le mot de passe ne peut pas être vide !", ""));
      }
    } else {
      FacesContext.getCurrentInstance().addMessage("old",
          new FacesMessage(FacesMessage.SEVERITY_ERROR, "Le mot de passe actuel est incorrect !", ""));
    }
  }
}
